/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package sv.com.intesal.compra.managed;

import java.io.Serializable;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import sv.com.intesal.clases.Mensaje;
import sv.com.intesal.compra.bean.AbonoCompra;
import sv.com.intesal.compra.bean.Compra;
import sv.com.intesal.compra.controlador.AbonoCompraControlador;
import sv.com.intesal.compra.controlador.CompraControlador;
import sv.com.intesal.seguridad.controlador.SessionControlador;
import sv.com.intesal.seguridad.managed.SessionManaged;

/**
 *
 * @author ejerez
 */
@ManagedBean(name = "abonoCompraManaged")
@ViewScoped
public class AbonoCompraManaged implements Serializable {

    private Mensaje m;
    private SessionManaged sm;
    /*ABONO COMPRA*/
    private List<AbonoCompra> abonoCompras;
    private AbonoCompra selectedEncaAbonoCompra;
    private AbonoCompra selectedDetaAbonoCompra;
    /*COMPRA*/
    private Compra selectedCompra;

    /*ABONO COMPRA*/
    private Boolean flag_abono_1;
    private Boolean flag_abono_2;

    /* QUICK COMPRA*/
    private Boolean flag_compra_1;
    private Boolean flag_compra_2;

    public AbonoCompraManaged() {
        this.m = new Mensaje();
        this.sm = new SessionManaged();

        this.selectedEncaAbonoCompra = new AbonoCompra();
        this.selectedDetaAbonoCompra = new AbonoCompra();
    }

    private Boolean validar() throws Exception {

        Boolean var_return = true;
        try {

            if (this.selectedEncaAbonoCompra.getFecha_ac() == null) {
                m.messageAdvertencia(m.campoError("FECHA"));
                var_return = false;
            }
            if (this.selectedEncaAbonoCompra.getMonto_ac() == null) {
                m.messageAdvertencia(m.campoError("MONTO"));
                var_return = false;
            }
            if (this.selectedCompra.getId_c() == null) {
                m.messageFatal("DEBE SELECCIONAR UNA COMPRA");
                var_return = false;
            }

            if (var_return == true) {

                if (this.selectedEncaAbonoCompra.getMonto_ac() <= 0 || this.selectedEncaAbonoCompra.getMonto_ac() <= 0.0) {
                    m.messageError("MONTO ES MENOR O IGUAL A CERO");
                    var_return = false;
                }
                if (this.selectedEncaAbonoCompra.getTotal_pendiente() == 0 || this.selectedEncaAbonoCompra.getTotal_pendiente() <= 0.0) {
                    m.messageFatal("LA COMPRA TIENE UN TOTAL PENDIENTE MENOR O IGUAL A CERO. NO PUEDE ABONAR COMPRA");
                    var_return = false;
                }
                if (this.selectedCompra.getTipo_documento_c().equals("Contado")) {
                    //m.messageError("NO PUEDE ELEGIR COMPRAS AL CONTADO");
                    var_return = false;
                }
                if (this.selectedEncaAbonoCompra.getTotal_Compra() < (this.selectedEncaAbonoCompra.getTotal_Abono() + this.selectedEncaAbonoCompra.getMonto_ac())) {
                    m.messageFatal("EL MONTO SOBREPASA LA COMPRA TOTAL");
                    var_return = false;
                }
            }
            return var_return;
        } catch (Exception e) {
            throw new Exception(e);
        }
    }

    public void completeTransaccion() {

        try {
            if (this.validar() == true) {
                if (this.selectedEncaAbonoCompra.getId_ac() == null) {
                    if (sm.validar_rol_usuario("wfrmAbonoCompra", sm.agregar) == true) {

                        this.selectedEncaAbonoCompra.setId_c(this.selectedCompra.getId_c());

                        AbonoCompraControlador ac = new AbonoCompraControlador();
                        ac.setAbonoCompra(this.selectedEncaAbonoCompra);

                        this.buscarAbonos();
                        this.selectedEncaAbonoCompra.setMonto_ac(null);
                        this.selectedEncaAbonoCompra.setFecha_ac(null);
                        //LimpiarManaged.limpiar();
                    }
                } else {
                    if (sm.validar_rol_usuario("wfrmAbonoCompra", sm.modificar) == true) {
                        this.selectedEncaAbonoCompra.setId_c(this.selectedCompra.getId_c());
                        AbonoCompraControlador ac = new AbonoCompraControlador();
                        ac.setAbonoCompra(this.selectedEncaAbonoCompra);
                        this.buscarAbonos();
                        this.selectedEncaAbonoCompra.setMonto_ac(null);
                        this.selectedEncaAbonoCompra.setFecha_ac(null);
                        //LimpiarManaged.limpiar();
                    }
                }
            }
        } catch (Exception e) {
            m.messageError(m.getIerror());
            e.printStackTrace();
        }
    }

    public void eliminarAbonoCompra() {

        try {
            if (this.selectedDetaAbonoCompra == null) {
                m.messageError("DEBE SELECCIONAR UN REGISTRO A ELIMINIAR");
            } else {
                if (sm.validar_rol_usuario("wfrmAbonoCompra", sm.eliminar) == true) {
                    AbonoCompraControlador ac = new AbonoCompraControlador();
                    ac.setEliminarAbono(this.selectedDetaAbonoCompra);
                    this.buscarAbonos();
                    //LimpiarManaged.limpiar();
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }

    private void buscarAbonos() {
        try {
            if (this.selectedCompra.getId_c() != null) {
                AbonoCompraControlador ac = new AbonoCompraControlador();
                this.abonoCompras = ac.getAbonos(this.selectedCompra.getId_c());

                this.llenarTotales();
            }
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }

    private void llenarTotales() throws Exception {

        try {
            if (this.selectedCompra.getId_c() != null) {
                AbonoCompraControlador ac = new AbonoCompraControlador();
                this.selectedEncaAbonoCompra.setTotal_Abono(ac.getSuma_AbonoCompra(this.selectedCompra.getId_c()));

                CompraControlador c = new CompraControlador();
                this.selectedEncaAbonoCompra.setTotal_Compra(c.getCompraTotal(this.selectedCompra.getId_c()));

                this.selectedEncaAbonoCompra.setTotal_pendiente((this.selectedEncaAbonoCompra.getTotal_Compra() - this.selectedEncaAbonoCompra.getTotal_Abono()));
            }
        } catch (Exception e) {
            throw new Exception(e);
        }
    }

    public void validarCompra_Redirect() {
        SessionControlador sc = new SessionControlador();
        try {
            if (sc.getCodigo_Proceso_Modificar() != 0) {
                CompraControlador cc = new CompraControlador();
                this.selectedCompra = cc.getEnca(sc.getCodigo_Proceso_Modificar());

                sc.setCodigo_Proceso_Modificar(0);
                this.buscarAbonos();
            }
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }


    /*SETTERS AND GETTERS*/
    public List<AbonoCompra> getAbonoCompras() {
        return abonoCompras;
    }

    public void setAbonoCompras(List<AbonoCompra> abonoCompras) {
        this.abonoCompras = abonoCompras;
    }

    public Compra getSelectedCompra() {
        if (selectedCompra == null) {
            selectedCompra = new Compra();
        }
        return selectedCompra;
    }

    public void setSelectedCompra(Compra selectedCompra) {
        this.selectedCompra = selectedCompra;
    }

    public AbonoCompra getSelectedDetaAbonoCompra() {
        if (selectedDetaAbonoCompra == null) {
            selectedDetaAbonoCompra = new AbonoCompra();
        }
        return selectedDetaAbonoCompra;
    }

    public void setSelectedDetaAbonoCompra(AbonoCompra selectedDetaAbonoCompra) {
        this.selectedDetaAbonoCompra = selectedDetaAbonoCompra;
    }

    public AbonoCompra getSelectedEncaAbonoCompra() {
        if (selectedEncaAbonoCompra == null) {
            selectedEncaAbonoCompra = new AbonoCompra();
        }
        return selectedEncaAbonoCompra;
    }

    public void setSelectedEncaAbonoCompra(AbonoCompra selectedEncaAbonoCompra) {
        this.selectedEncaAbonoCompra = selectedEncaAbonoCompra;
    }

    public Boolean getFlag_abono_1() {
        return flag_abono_1;
    }

    public void setFlag_abono_1(Boolean flag_abono_1) {
        this.flag_abono_1 = flag_abono_1;
    }

    public Boolean getFlag_abono_2() {
        return flag_abono_2;
    }

    public void setFlag_abono_2(Boolean flag_abono_2) {
        this.flag_abono_2 = flag_abono_2;
    }

    public Boolean getFlag_compra_1() {
        return flag_compra_1;
    }

    public void setFlag_compra_1(Boolean flag_compra_1) {
        this.flag_compra_1 = flag_compra_1;
    }

    public Boolean getFlag_compra_2() {
        return flag_compra_2;
    }

    public void setFlag_compra_2(Boolean flag_compra_2) {
        this.flag_compra_2 = flag_compra_2;
    }
}
